{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color=\"red\">注</font>: 使用 tensorboard 可视化需要安装 tensorflow (TensorBoard依赖于tensorflow库，可以任意安装tensorflow的gpu/cpu版本)\n",
    "\n",
    "```shell\n",
    "pip install tensorflow-cpu\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:08:26.466719400Z",
     "start_time": "2024-04-30T03:08:17.277867200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=9, micro=7, releaselevel='final', serial=0)\n",
      "matplotlib 3.8.4\n",
      "numpy 1.26.4\n",
      "pandas 2.2.2\n",
      "sklearn 1.4.2\n",
      "torch 2.2.2+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n",
    "\n",
    "seed = 42\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据准备\n",
    "\n",
    "https://www.kaggle.com/competitions/cifar-10/data\n",
    "\n",
    "```shell\n",
    "$ tree -L 1 cifar-10                                    \n",
    "cifar-10\n",
    "├── sampleSubmission.csv\n",
    "├── test\n",
    "├── train\n",
    "└── trainLabels.csv\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:09:27.792078300Z",
     "start_time": "2024-04-30T03:09:23.644044900Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(WindowsPath('D:/cifar-10/train/1.png'), 'frog'),\n",
      " (WindowsPath('D:/cifar-10/train/2.png'), 'truck'),\n",
      " (WindowsPath('D:/cifar-10/train/3.png'), 'truck'),\n",
      " (WindowsPath('D:/cifar-10/train/4.png'), 'deer'),\n",
      " (WindowsPath('D:/cifar-10/train/5.png'), 'automobile')]\n",
      "[(WindowsPath('D:/cifar-10/test/1.png'), 'cat'),\n",
      " (WindowsPath('D:/cifar-10/test/2.png'), 'cat'),\n",
      " (WindowsPath('D:/cifar-10/test/3.png'), 'cat'),\n",
      " (WindowsPath('D:/cifar-10/test/4.png'), 'cat'),\n",
      " (WindowsPath('D:/cifar-10/test/5.png'), 'cat')]\n",
      "50000 300000\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "DATA_DIR = Path(\"D:\\\\cifar-10\")\n",
    "\n",
    "train_lables_file = DATA_DIR / \"trainLabels.csv\"\n",
    "test_csv_file = DATA_DIR / \"sampleSubmission.csv\"\n",
    "train_folder = DATA_DIR / \"train/\"\n",
    "test_folder = DATA_DIR / \"test\"\n",
    "\n",
    "#所有的类别\n",
    "class_names = [\n",
    "    'airplane',\n",
    "    'automobile',\n",
    "    'bird',\n",
    "    'cat',\n",
    "    'deer',\n",
    "    'dog',\n",
    "    'frog',\n",
    "    'horse',\n",
    "    'ship',\n",
    "    'truck',\n",
    "]\n",
    "\n",
    "def parse_csv_file(filepath, folder):\n",
    "    \"\"\"Parses csv files into (filename(path), label) format\"\"\"\n",
    "    results = []\n",
    "    #读取所有行\n",
    "    with open(filepath, 'r') as f:\n",
    "#         lines = f.readlines()  为什么加[1:]，可以试这个\n",
    "        #第一行不需要，因为第一行是标签\n",
    "        lines = f.readlines()[1:] \n",
    "    for line in lines:#依次去取每一行\n",
    "        image_id, label_str = line.strip('\\n').split(',')\n",
    "        image_full_path = folder / f\"{image_id}.png\"\n",
    "        results.append((image_full_path, label_str)) #得到对应图片的路径和分类\n",
    "    return results\n",
    "\n",
    "#解析对应的文件夹\n",
    "train_labels_info = parse_csv_file(train_lables_file, train_folder)\n",
    "test_csv_info = parse_csv_file(test_csv_file, test_folder)\n",
    "#打印\n",
    "import pprint\n",
    "pprint.pprint(train_labels_info[0:5])\n",
    "pprint.pprint(test_csv_info[0:5])\n",
    "print(len(train_labels_info), len(test_csv_info))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:09:30.583944400Z",
     "start_time": "2024-04-30T03:09:30.436028300Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                  filepath       class\n",
      "0  D:\\cifar-10\\train\\1.png        frog\n",
      "1  D:\\cifar-10\\train\\2.png       truck\n",
      "2  D:\\cifar-10\\train\\3.png       truck\n",
      "3  D:\\cifar-10\\train\\4.png        deer\n",
      "4  D:\\cifar-10\\train\\5.png  automobile\n",
      "                      filepath       class\n",
      "0  D:\\cifar-10\\train\\45001.png       horse\n",
      "1  D:\\cifar-10\\train\\45002.png  automobile\n",
      "2  D:\\cifar-10\\train\\45003.png        deer\n",
      "3  D:\\cifar-10\\train\\45004.png  automobile\n",
      "4  D:\\cifar-10\\train\\45005.png    airplane\n",
      "                 filepath class\n",
      "0  D:\\cifar-10\\test\\1.png   cat\n",
      "1  D:\\cifar-10\\test\\2.png   cat\n",
      "2  D:\\cifar-10\\test\\3.png   cat\n",
      "3  D:\\cifar-10\\test\\4.png   cat\n",
      "4  D:\\cifar-10\\test\\5.png   cat\n"
     ]
    }
   ],
   "source": [
    "# train_df = pd.DataFrame(train_labels_info)\n",
    "train_df = pd.DataFrame(train_labels_info[0:45000])\n",
    "valid_df = pd.DataFrame(train_labels_info[45000:])\n",
    "test_df = pd.DataFrame(test_csv_info)\n",
    "\n",
    "train_df.columns = ['filepath', 'class']\n",
    "valid_df.columns = ['filepath', 'class']\n",
    "test_df.columns = ['filepath', 'class']\n",
    "\n",
    "print(train_df.head())\n",
    "print(valid_df.head())\n",
    "print(test_df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:09:40.361166200Z",
     "start_time": "2024-04-30T03:09:38.275234700Z"
    }
   },
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "from torchvision import transforms\n",
    "\n",
    "class Cifar10Dataset(Dataset):\n",
    "    df_map = {\n",
    "        \"train\": train_df,\n",
    "        \"eval\": valid_df,\n",
    "        \"test\": test_df\n",
    "    }\n",
    "    label_to_idx = {label: idx for idx, label in enumerate(class_names)}\n",
    "    idx_to_label = {idx: label for idx, label in enumerate(class_names)}\n",
    "    def __init__(self, mode, transform=None):\n",
    "        self.df = self.df_map.get(mode, None)\n",
    "        if self.df is None:\n",
    "            raise ValueError(\"mode should be one of train, val, test, but got {}\".format(mode))\n",
    "\n",
    "        self.transform = transform\n",
    "        \n",
    "    def __getitem__(self, index):\n",
    "        img_path, label = self.df.iloc[index]\n",
    "        img = Image.open(img_path).convert('RGB')\n",
    "        # # img 转换为 channel first\n",
    "        # img = img.transpose((2, 0, 1))\n",
    "        # transform\n",
    "        img = self.transform(img)\n",
    "        # label 转换为 idx\n",
    "        label = self.label_to_idx[label]\n",
    "        return img, label\n",
    "    \n",
    "    def __len__(self):\n",
    "        return self.df.shape[0]\n",
    "    \n",
    "IMAGE_SIZE = 32\n",
    "mean, std = [0.4914, 0.4822, 0.4465], [0.247, 0.243, 0.261]\n",
    "\n",
    "transforms_train = transforms.Compose([\n",
    "        # resize\n",
    "        transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)),\n",
    "        # random rotation 40\n",
    "        transforms.RandomRotation(40),\n",
    "        # horizaontal flip\n",
    "        transforms.RandomHorizontalFlip(),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize(mean, std)\n",
    "    ])\n",
    "\n",
    "transforms_eval = transforms.Compose([\n",
    "        # resize\n",
    "        transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize(mean, std)\n",
    "    ])\n",
    "\n",
    "train_ds = Cifar10Dataset(\"train\", transforms_train)\n",
    "eval_ds = Cifar10Dataset(\"eval\", transforms_eval) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:09:43.545874100Z",
     "start_time": "2024-04-30T03:09:43.519888900Z"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 64\n",
    "train_dl = DataLoader(train_ds, batch_size=batch_size, shuffle=True, num_workers=4)   \n",
    "eval_dl = DataLoader(eval_ds, batch_size=batch_size, shuffle=False, num_workers=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(tensor([-0.2207, -0.2280, -0.1984]), tensor([0.9980, 0.9955, 0.9041]))\n"
     ]
    }
   ],
   "source": [
    "# 遍历train_ds得到每张图片，计算每个通道的均值和方差\n",
    "# def cal_mean_std(ds):\n",
    "#     mean = 0.\n",
    "#     std = 0.\n",
    "#     for img, _ in ds:\n",
    "#         mean += img.mean(dim=(1, 2))\n",
    "#         std += img.std(dim=(1, 2))\n",
    "#     mean /= len(ds)\n",
    "#     std /= len(ds)\n",
    "#     return mean, std\n",
    "#\n",
    "# # 经过 normalize 后 均值为0，方差为1\n",
    "# print(cal_mean_std(train_ds))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T03:33:59.691021200Z",
     "start_time": "2024-04-30T03:33:59.642042400Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             model.0.weight             paramerters num: 864\n",
      "              model.0.bias              paramerters num: 32\n",
      "             model.2.weight             paramerters num: 9216\n",
      "              model.2.bias              paramerters num: 32\n",
      "             model.5.weight             paramerters num: 9216\n",
      "              model.5.bias              paramerters num: 32\n",
      "             model.7.weight             paramerters num: 9216\n",
      "              model.7.bias              paramerters num: 32\n",
      "            model.10.weight             paramerters num: 9216\n",
      "             model.10.bias              paramerters num: 32\n",
      "            model.12.weight             paramerters num: 9216\n",
      "             model.12.bias              paramerters num: 32\n",
      "            model.16.weight             paramerters num: 5120\n",
      "             model.16.bias              paramerters num: 10\n"
     ]
    }
   ],
   "source": [
    "class VGG(nn.Module):\n",
    "    def __init__(self, num_classes):\n",
    "        super().__init__()\n",
    "        self.model = nn.Sequential(\n",
    "            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Flatten(),\n",
    "            nn.Linear(512, num_classes),\n",
    "        )\n",
    "        self.init_weights()\n",
    "        \n",
    "    def init_weights(self):\n",
    "        \"\"\"使用 xavier 均匀分布来初始化全连接层、卷积层的权重 W\"\"\"\n",
    "        for m in self.modules():\n",
    "            if isinstance(m, (nn.Linear, nn.Conv2d)): # 全连接层、卷积层\n",
    "                nn.init.kaiming_uniform_(m.weight, mode='fan_in', nonlinearity='relu') # 采用kaiming_uniform初始化权重, mode='fan_in'表示权重初始化为均匀分布，nonlinearity='relu'表示激活函数为relu\n",
    "                if m.bias is not None:\n",
    "                    nn.init.constant_(m.bias, 0.01)  # 偏置初始化为常数值，比如0.01\n",
    "        \n",
    "    def forward(self, x):\n",
    "        return self.model(x)\n",
    "        \n",
    "for key, value in VGG(len(class_names)).named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")\n",
    "    \n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item())\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测\n",
    "        pred_list.extend(preds.cpu().numpy().tolist())\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list)\n",
    "    return np.mean(loss_list), acc\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### TensorBoard 可视化\n",
    "\n",
    "\n",
    "训练过程中可以使用如下命令启动tensorboard服务。\n",
    "\n",
    "```shell\n",
    "tensorboard \\\n",
    "    --logdir=runs \\     # log 存放路径\n",
    "    --host 0.0.0.0 \\    # ip\n",
    "    --port 8848         # 端口\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs)\n",
    "\n",
    "    def draw_model(self, model, input_shape):\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape))\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            )\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        )\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "            \n",
    "        )\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss)\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc)\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=5000, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir\n",
    "        self.save_step = save_step\n",
    "        self.save_best_only = save_best_only\n",
    "        self.best_metrics = -1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir):\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0:\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\"))\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\"))\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience\n",
    "        self.min_delta = min_delta\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2023-06-01 00:14:13.700508: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX_VNNI FMA\n",
      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "832bbdb6a72e43dabb55587a9625ebbd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/7040 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device)\n",
    "                labels = labels.to(device)\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train()\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"],\n",
    "                            )\n",
    "                \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc)\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc)\n",
    "                        if early_stop_callback.early_stop:\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict\n",
    "        \n",
    "\n",
    "epoch = 10\n",
    "\n",
    "model = VGG(num_classes=10)\n",
    "\n",
    "# 1. 定义损失函数 采用交叉熵损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用 adam\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001,betas=(0.9, 0.999))\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "if not os.path.exists(\"runs\"):\n",
    "    os.mkdir(\"runs\")\n",
    "tensorboard_callback = TensorBoardCallback(\"runs/vgg\")\n",
    "tensorboard_callback.draw_model(model, [1, 3, IMAGE_SIZE, IMAGE_SIZE])\n",
    "# 2. save best\n",
    "if not os.path.exists(\"checkpoints\"):\n",
    "    os.makedirs(\"checkpoints\")\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints/vgg\", save_step=len(train_dl), save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=5)\n",
    "\n",
    "model = model.to(device)\n",
    "record = training(\n",
    "    model, \n",
    "    train_dl, \n",
    "    eval_dl, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=len(train_dl)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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fvOb37Bp0yaam5sZN24cd955J3PnztUeb9q0afz4xz/mxz/+MQBZWVk88sgjrFq1ig8++IAhQ4Zw7733xpRV83g83H777axbt47KykqGDh3KD37wA2666aaQ9V544QUef/xxiouLycrKYtGiRTz44IMANDQ0cPvtt7Ny5UoaGxsZOXIkd911F+eff37E53Q6nbS0tLBu3TrcbneHMfYkq1ev7tPn7yyJGHd7MR+1w1sler5R5KUotReDioFEfK2h83HHO/T8uBc8psqveah2Ma06CxD5n5ogCF2nxeVh0p3v9frz7rxnAVZzbP/KHnnkEfbu3cuUKVO45557ANixYwcAv/rVr/jTn/7EqFGjyMrK4siRIyxcuJD77rsPi8XCc889x+WXX86uXbsYMWJE1OdYtmwZDzzwAA8++CB/+ctfuPLKKzl8+DDZ2dlx7dfmzZu59NJLufvuu7nsssv47LPPuPnmm8nJyeHaa69l06ZN/OQnP+Ef//gHp512GrW1tXz88ccAlJeXc/nll/PAAw9w4YUXUl5ezpYtW7Sr3Mcbubm5GAwGKioqQpZXVFQwePDgiNv87ne/46qrruKHP/whAFOnTsVut/OjH/2I3/zmNxGF+NKlS1myZIl2u7GxkaKiIubPn096enrIuq2trRw5coTU1FSSkpJodrqZ8ce+OSHZfve8mI6Rxx9/nEOHDjF58mRN2KnHx+9//3seeOABRo4ciclkoq6ujkWLFvGHP/wBi8XCP/7xD+34GDZsGKCUFSYlJYW8Ng8++CB/+MMfWLFiBY899hg33ngjBw8e7PD4cLlcjBw5kltvvZWcnBw+++wzbrrpJkaMGMGll14KwJNPPskdd9zB8uXLOf/882loaOCzzz4jPT0dj8fD/PnzaW5u5h//+AejR49m586dGAyGsPdOpbW1leTkZM4888w+m8PjcrlYvXo18+bNw2Qy9UkMnSER444l5nvf3s2u+hJaDan8b/FpWIx93xmSiK81dD1uNcMeK8e94ElKyWSk/jDNPgv4+j6tLghC35GRkYHZbMZqtWonwmrJ0z333MO8efO0dbOzs5k+fbp2+5577uE///kP//vf/7j11lujPse1117L5ZdfDsD999/Po48+ysaNG6NeRY7GihUrOPfcc7Vsw7hx49i5cycPPvgg1157LSUlJaSkpPDNb36TtLQ0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xLYr+91XJGLMIHHHisfjQafTodfrO3VlWi2tUh+jN7FarXz729/mn//8J8XFxYwfP56TTjoJgM8++4xrr72W73znOwDYbDYOHTrE3LlzQ8RCPHGrr9GkSZN47rnnaGlpISVFOfFdv349er2eiRMnao83c+ZMZs6cya9//Wtmz57Nyy+/zGmnnQbAhAkTmDBhAkuWLOHyyy/nueee02KNRiyvtV6vR6fTRfwcJeLxIHSepKQkvv3tb/Piiy+yf/9+xo8fz4knnggoBgLXXHMN3/zmN0lPT6e5uZlDhw516nk2b96M1+vloYce0j6X//rXv0LWmTZtGmvWrIlY8TF27FiSk5NZs2YNP/zhDzsVgyDEQ0emBQBTCjN4e1s5244O3D6eOrtf8DS14vP5ev2iZjTiOtPw+XwsXryY119/nQ8++CDmcooHHniAe++9l3fffVc7sehtVNv0hpQRyh/i1CYIA5Yrr7ySt99+m2eeeYYrr7xSWz527Fhee+01tmzZwtdff80VV1wRc69OLM+ZlJTENddcw/bt2/nwww+59dZbueqqq8jPz+fgwYMsXbqU9evXc/jwYVatWsW+ffuYOHEiLS0tLF68mLVr13L48GE+/fRTvvjiCyZOnNgtsQlCMO0dH6+//jrbtm3r8vExZswYXC4Xf/nLXyguLuYf//gHTz31VMg6S5cu5YsvvuDmm29m69at7N69myeffJLq6mqSkpL45S9/yS9+8Quef/55Dhw4wOeff87TTz/dpX0XhGjYO+jhAZg2VKyp6/yDV10en/Z3fyAuwXPLLbfwwgsv8NJLL5GWlsaxY8c4duwYLS0t2jpXX301S5cu1W7/8Y9/5He/+x3PPPMMI0aM0LZpaz3Z06iCpzZ5hPJH3SFw9690myAIvcM555xDdnY2e/bs4YorrtCWr1ixgqysLE477TQWLVrEggULtKvbXcVqtfLee+9RW1vLySefzHe/+13OPfdcHnvsMe3+3bt3853vfIdx48bxox/9iFtuuYUbb7wRg8FATU0NV199NePGjePSSy/lggsuiHjlWxC6SkfHx4IFC7jwwgu7dHxMnz6dFStW8Mc//pEpU6bw4osvsnz58pB1xo0bx6pVq/j666855ZRTmD17Nm+++SZGo3LC+bvf/Y6f/exn3HnnnUycOJHLLruMysrKzu+4ILSD2sOTGmHw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35KARwghhBBCCNFvScAjhBBCCCGE6Lck4BFCCCGEEEL0WxLwCNFDrr76ai666KLeXoYQQggByHlJCI0EPEIIIYQQQoh+SwIeITrp1VdfZdKkScTHx5OZmcn8+fO5+eabefbZZ3nzzTcxGAwYDAbWrVsHwLFjx/je975HWloaGRkZfOtb3+LIkSP6/WmfwN1xxx1kZ2eTkpLC9ddfj9Pp7J0fUAghREyR85IQbTP39gKEiCUnT57ksssu489//jMXX3wxdXV1fPTRR1x55ZUUFRVht9t5+umnAcjIyMDlcrFgwQLmzJnDRx99hNls5q677uL8889nx44dWK1WANasWUNcXBzr1q3jyJEjLF68mMzMTP74xz/25o8rhBCij5PzkhDtk4BHiE44efIkbrebSy65hGHDhgEwadIkAOLj43E4HOTl5enHP//883i9Xp588kkMBgMATz/9NGlpaaxbt47zzjsPAKvVylNPPUVCQgKnnHIKf/jDH7j55pu58847MRolESuEECI0OS8J0T55xQrRCVOmTGHevHlMmjSJ7373uzzxxBNUV1eHPf6LL77gwIEDJCcnk5SURFJSEhkZGTQ3N3Pw4MGg+01ISNC/nzNnDvX19Rw7diyiP48QQojYJuclIdonGR4hOsFkMrF69Wo++eQT3nvvPR588EFuu+02Nm3aFPL4+vp6ZsyYwQsvvNDquuzs7EgvVwghRD8n5yUh2icBjxCdZDAYmDt3LnPnzuX2229n2LBhvP7661itVjweT9Cx06dP55VXXiEnJ4eUlJSw9/nFF1/Q1NREfHw8AJ9++ilJSUkUFBRE9GcRQggR++S8JETbpKRNiE7YtGkTd999N59//jlFRUW89tprlJeXM378eAoLC9mxYwd79+6loqICl8vFFVdcQVZWFt/61rf46KOPOHz4MOvWreMXv/gFx48f1+/X6XTyox/9iF27drFy5UqWL1/OkiVLpE5aCCFEm+S8JET7JMMjRCekpKSwfv16HnjgAex2O8OGDeMvf/kLCxcuZObMmaxbt46ZM2dSX1/P2rVrOfvss1m/fj233HILl1xyCXV1deTn5zNv3rygT9bmzZvH6NGjOfPMM3E4HFx22WX8/ve/770fVAghREyQ85IQ7TMoiqL09iKEGMiuvvpqampqeOONN3p7KUIIIYScl0S/I3lJIYQQQgghRL8lAY8QQgghhBCi35KSNiGEEEIIIUS/JRkeIYQQQgghRL8lAY8QQgghhBCi35KARwghhBBCCNFvScAjhBBCCCGE6Lck4BFCCCGEEEL0WxLwCCGEEEIIIfotCXiEEEIIIYQQ/ZYEPEIIIYQQQoh+SwIeIYQQQgghRL/1/wEFW5Ba26wv5gAAAABJRU5ErkJggg==",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"596.499199pt\" height=\"321.95625pt\" viewBox=\"0 0 596.499199 321.95625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-06-01T00:15:19.352218</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.3, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M -0 321.95625 \n",
       "L 596.499199 321.95625 \n",
       "L 596.499199 0 \n",
       "L -0 0 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "L 30.103125 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path d=\"M 41.632051 284.4 \n",
       "L 41.632051 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path id=\"mc42bdc3a8c\" d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"41.632051\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(38.450801 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \n",
       "Q 1547 4250 1301 3770 \n",
       "Q 1056 3291 1056 2328 \n",
       "Q 1056 1369 1301 889 \n",
       "Q 1547 409 2034 409 \n",
       "Q 2525 409 2770 889 \n",
       "Q 3016 1369 3016 2328 \n",
       "Q 3016 3291 2770 3770 \n",
       "Q 2525 4250 2034 4250 \n",
       "z\n",
       "M 2034 4750 \n",
       "Q 2819 4750 3233 4129 \n",
       "Q 3647 3509 3647 2328 \n",
       "Q 3647 1150 3233 529 \n",
       "Q 2819 -91 2034 -91 \n",
       "Q 1250 -91 836 529 \n",
       "Q 422 1150 422 2328 \n",
       "Q 422 3509 836 4129 \n",
       "Q 1250 4750 2034 4750 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path d=\"M 74.571838 284.4 \n",
       "L 74.571838 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"74.571838\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(61.846838 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
       "L 1825 531 \n",
       "L 1825 4091 \n",
       "L 703 3866 \n",
       "L 703 4441 \n",
       "L 1819 4666 \n",
       "L 2450 4666 \n",
       "L 2450 531 \n",
       "L 3481 531 \n",
       "L 3481 0 \n",
       "L 794 0 \n",
       "L 794 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path d=\"M 107.511626 284.4 \n",
       "L 107.511626 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"107.511626\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(94.786626 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
       "L 3431 531 \n",
       "L 3431 0 \n",
       "L 469 0 \n",
       "L 469 531 \n",
       "Q 828 903 1448 1529 \n",
       "Q 2069 2156 2228 2338 \n",
       "Q 2531 2678 2651 2914 \n",
       "Q 2772 3150 2772 3378 \n",
       "Q 2772 3750 2511 3984 \n",
       "Q 2250 4219 1831 4219 \n",
       "Q 1534 4219 1204 4116 \n",
       "Q 875 4013 500 3803 \n",
       "L 500 4441 \n",
       "Q 881 4594 1212 4672 \n",
       "Q 1544 4750 1819 4750 \n",
       "Q 2544 4750 2975 4387 \n",
       "Q 3406 4025 3406 3419 \n",
       "Q 3406 3131 3298 2873 \n",
       "Q 3191 2616 2906 2266 \n",
       "Q 2828 2175 2409 1742 \n",
       "Q 1991 1309 1228 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path d=\"M 140.451413 284.4 \n",
       "L 140.451413 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"140.451413\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(127.726413 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \n",
       "Q 3050 2419 3304 2112 \n",
       "Q 3559 1806 3559 1356 \n",
       "Q 3559 666 3084 287 \n",
       "Q 2609 -91 1734 -91 \n",
       "Q 1441 -91 1130 -33 \n",
       "Q 819 25 488 141 \n",
       "L 488 750 \n",
       "Q 750 597 1062 519 \n",
       "Q 1375 441 1716 441 \n",
       "Q 2309 441 2620 675 \n",
       "Q 2931 909 2931 1356 \n",
       "Q 2931 1769 2642 2001 \n",
       "Q 2353 2234 1838 2234 \n",
       "L 1294 2234 \n",
       "L 1294 2753 \n",
       "L 1863 2753 \n",
       "Q 2328 2753 2575 2939 \n",
       "Q 2822 3125 2822 3475 \n",
       "Q 2822 3834 2567 4026 \n",
       "Q 2313 4219 1838 4219 \n",
       "Q 1578 4219 1281 4162 \n",
       "Q 984 4106 628 3988 \n",
       "L 628 4550 \n",
       "Q 988 4650 1302 4700 \n",
       "Q 1616 4750 1894 4750 \n",
       "Q 2613 4750 3031 4423 \n",
       "Q 3450 4097 3450 3541 \n",
       "Q 3450 3153 3228 2886 \n",
       "Q 3006 2619 2597 2516 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path d=\"M 173.391201 284.4 \n",
       "L 173.391201 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"173.391201\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(160.666201 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \n",
       "L 825 1625 \n",
       "L 2419 1625 \n",
       "L 2419 4116 \n",
       "z\n",
       "M 2253 4666 \n",
       "L 3047 4666 \n",
       "L 3047 1625 \n",
       "L 3713 1625 \n",
       "L 3713 1100 \n",
       "L 3047 1100 \n",
       "L 3047 0 \n",
       "L 2419 0 \n",
       "L 2419 1100 \n",
       "L 313 1100 \n",
       "L 313 1709 \n",
       "L 2253 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path d=\"M 206.330988 284.4 \n",
       "L 206.330988 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"206.330988\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_6\">\n",
       "      <!-- 5000 -->\n",
       "      <g transform=\"translate(193.605988 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-35\" d=\"M 691 4666 \n",
       "L 3169 4666 \n",
       "L 3169 4134 \n",
       "L 1269 4134 \n",
       "L 1269 2991 \n",
       "Q 1406 3038 1543 3061 \n",
       "Q 1681 3084 1819 3084 \n",
       "Q 2600 3084 3056 2656 \n",
       "Q 3513 2228 3513 1497 \n",
       "Q 3513 744 3044 326 \n",
       "Q 2575 -91 1722 -91 \n",
       "Q 1428 -91 1123 -41 \n",
       "Q 819 9 494 109 \n",
       "L 494 744 \n",
       "Q 775 591 1075 516 \n",
       "Q 1375 441 1709 441 \n",
       "Q 2250 441 2565 725 \n",
       "Q 2881 1009 2881 1497 \n",
       "Q 2881 1984 2565 2268 \n",
       "Q 2250 2553 1709 2553 \n",
       "Q 1456 2553 1204 2497 \n",
       "Q 953 2441 691 2322 \n",
       "L 691 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-35\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_7\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path d=\"M 239.270776 284.4 \n",
       "L 239.270776 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"239.270776\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_7\">\n",
       "      <!-- 6000 -->\n",
       "      <g transform=\"translate(226.545776 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \n",
       "Q 1688 2584 1439 2293 \n",
       "Q 1191 2003 1191 1497 \n",
       "Q 1191 994 1439 701 \n",
       "Q 1688 409 2113 409 \n",
       "Q 2538 409 2786 701 \n",
       "Q 3034 994 3034 1497 \n",
       "Q 3034 2003 2786 2293 \n",
       "Q 2538 2584 2113 2584 \n",
       "z\n",
       "M 3366 4563 \n",
       "L 3366 3988 \n",
       "Q 3128 4100 2886 4159 \n",
       "Q 2644 4219 2406 4219 \n",
       "Q 1781 4219 1451 3797 \n",
       "Q 1122 3375 1075 2522 \n",
       "Q 1259 2794 1537 2939 \n",
       "Q 1816 3084 2150 3084 \n",
       "Q 2853 3084 3261 2657 \n",
       "Q 3669 2231 3669 1497 \n",
       "Q 3669 778 3244 343 \n",
       "Q 2819 -91 2113 -91 \n",
       "Q 1303 -91 875 529 \n",
       "Q 447 1150 447 2328 \n",
       "Q 447 3434 972 4092 \n",
       "Q 1497 4750 2381 4750 \n",
       "Q 2619 4750 2861 4703 \n",
       "Q 3103 4656 3366 4563 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-36\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_8\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path d=\"M 272.210563 284.4 \n",
       "L 272.210563 7.2 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"272.210563\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- 7000 -->\n",
       "      <g transform=\"translate(259.485563 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-37\" d=\"M 525 4666 \n",
       "L 3525 4666 \n",
       "L 3525 4397 \n",
       "L 1831 0 \n",
       "L 1172 0 \n",
       "L 2766 4134 \n",
       "L 525 4134 \n",
       "L 525 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-37\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_9\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(146.105682 312.676563) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \n",
       "L 2834 2853 \n",
       "Q 2591 2978 2328 3040 \n",
       "Q 2066 3103 1784 3103 \n",
       "Q 1356 3103 1142 2972 \n",
       "Q 928 2841 928 2578 \n",
       "Q 928 2378 1081 2264 \n",
       "Q 1234 2150 1697 2047 \n",
       "L 1894 2003 \n",
       "Q 2506 1872 2764 1633 \n",
       "Q 3022 1394 3022 966 \n",
       "Q 3022 478 2636 193 \n",
       "Q 2250 -91 1575 -91 \n",
       "Q 1294 -91 989 -36 \n",
       "Q 684 19 347 128 \n",
       "L 347 722 \n",
       "Q 666 556 975 473 \n",
       "Q 1284 391 1588 391 \n",
       "Q 1994 391 2212 530 \n",
       "Q 2431 669 2431 922 \n",
       "Q 2431 1156 2273 1281 \n",
       "Q 2116 1406 1581 1522 \n",
       "L 1381 1569 \n",
       "Q 847 1681 609 1914 \n",
       "Q 372 2147 372 2553 \n",
       "Q 372 3047 722 3315 \n",
       "Q 1072 3584 1716 3584 \n",
       "Q 2034 3584 2315 3537 \n",
       "Q 2597 3491 2834 3397 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-70\" d=\"M 1159 525 \n",
       "L 1159 -1331 \n",
       "L 581 -1331 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "z\n",
       "M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path d=\"M 30.103125 255.140072 \n",
       "L 283.739489 255.140072 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <defs>\n",
       "       <path id=\"m57fcd70426\" d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"255.140072\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(7.2 258.939291) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-2e\" d=\"M 684 794 \n",
       "L 1344 794 \n",
       "L 1344 0 \n",
       "L 684 0 \n",
       "L 684 794 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "        <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \n",
       "Q 1584 2216 1326 1975 \n",
       "Q 1069 1734 1069 1313 \n",
       "Q 1069 891 1326 650 \n",
       "Q 1584 409 2034 409 \n",
       "Q 2484 409 2743 651 \n",
       "Q 3003 894 3003 1313 \n",
       "Q 3003 1734 2745 1975 \n",
       "Q 2488 2216 2034 2216 \n",
       "z\n",
       "M 1403 2484 \n",
       "Q 997 2584 770 2862 \n",
       "Q 544 3141 544 3541 \n",
       "Q 544 4100 942 4425 \n",
       "Q 1341 4750 2034 4750 \n",
       "Q 2731 4750 3128 4425 \n",
       "Q 3525 4100 3525 3541 \n",
       "Q 3525 3141 3298 2862 \n",
       "Q 3072 2584 2669 2484 \n",
       "Q 3125 2378 3379 2068 \n",
       "Q 3634 1759 3634 1313 \n",
       "Q 3634 634 3220 271 \n",
       "Q 2806 -91 2034 -91 \n",
       "Q 1263 -91 848 271 \n",
       "Q 434 634 434 1313 \n",
       "Q 434 1759 690 2068 \n",
       "Q 947 2378 1403 2484 \n",
       "z\n",
       "M 1172 3481 \n",
       "Q 1172 3119 1398 2916 \n",
       "Q 1625 2713 2034 2713 \n",
       "Q 2441 2713 2670 2916 \n",
       "Q 2900 3119 2900 3481 \n",
       "Q 2900 3844 2670 4047 \n",
       "Q 2441 4250 2034 4250 \n",
       "Q 1625 4250 1398 4047 \n",
       "Q 1172 3844 1172 3481 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-38\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_19\">\n",
       "      <path d=\"M 30.103125 223.857855 \n",
       "L 283.739489 223.857855 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_20\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"223.857855\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_11\">\n",
       "      <!-- 1.0 -->\n",
       "      <g transform=\"translate(7.2 227.657074) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_21\">\n",
       "      <path d=\"M 30.103125 192.575638 \n",
       "L 283.739489 192.575638 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_22\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"192.575638\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_12\">\n",
       "      <!-- 1.2 -->\n",
       "      <g transform=\"translate(7.2 196.374857) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_4\">\n",
       "     <g id=\"line2d_23\">\n",
       "      <path d=\"M 30.103125 161.293421 \n",
       "L 283.739489 161.293421 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_24\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"161.293421\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_13\">\n",
       "      <!-- 1.4 -->\n",
       "      <g transform=\"translate(7.2 165.09264) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-34\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_5\">\n",
       "     <g id=\"line2d_25\">\n",
       "      <path d=\"M 30.103125 130.011204 \n",
       "L 283.739489 130.011204 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_26\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"130.011204\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_14\">\n",
       "      <!-- 1.6 -->\n",
       "      <g transform=\"translate(7.2 133.810423) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-36\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_6\">\n",
       "     <g id=\"line2d_27\">\n",
       "      <path d=\"M 30.103125 98.728987 \n",
       "L 283.739489 98.728987 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_28\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"98.728987\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_15\">\n",
       "      <!-- 1.8 -->\n",
       "      <g transform=\"translate(7.2 102.528205) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-38\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_7\">\n",
       "     <g id=\"line2d_29\">\n",
       "      <path d=\"M 30.103125 67.44677 \n",
       "L 283.739489 67.44677 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_30\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"67.44677\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_16\">\n",
       "      <!-- 2.0 -->\n",
       "      <g transform=\"translate(7.2 71.245988) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_8\">\n",
       "     <g id=\"line2d_31\">\n",
       "      <path d=\"M 30.103125 36.164552 \n",
       "L 283.739489 36.164552 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_32\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"30.103125\" y=\"36.164552\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_17\">\n",
       "      <!-- 2.2 -->\n",
       "      <g transform=\"translate(7.2 39.963771) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_33\">\n",
       "    <path d=\"M 41.632051 19.8 \n",
       "L 44.926029 85.596263 \n",
       "L 48.220008 103.256886 \n",
       "L 51.513987 112.610143 \n",
       "L 54.807966 139.227915 \n",
       "L 58.101944 135.61862 \n",
       "L 61.395923 163.366467 \n",
       "L 64.689902 182.008971 \n",
       "L 67.983881 188.019807 \n",
       "L 71.277859 143.475936 \n",
       "L 74.571838 190.098518 \n",
       "L 77.865817 155.044613 \n",
       "L 81.159796 185.654681 \n",
       "L 84.453774 170.355082 \n",
       "L 87.747753 174.529937 \n",
       "L 91.041732 175.413425 \n",
       "L 94.335711 233.728688 \n",
       "L 97.629689 181.623882 \n",
       "L 100.923668 219.549478 \n",
       "L 104.217647 158.146989 \n",
       "L 107.511626 194.701813 \n",
       "L 110.805604 209.937084 \n",
       "L 114.099583 166.071094 \n",
       "L 117.393562 220.433021 \n",
       "L 120.687541 186.858034 \n",
       "L 123.981519 221.403882 \n",
       "L 127.275498 219.501186 \n",
       "L 130.569477 231.345111 \n",
       "L 133.863456 205.269629 \n",
       "L 137.157434 219.478849 \n",
       "L 140.451413 196.745265 \n",
       "L 143.745392 222.289271 \n",
       "L 147.039371 198.111973 \n",
       "L 150.333349 143.983228 \n",
       "L 153.627328 223.102091 \n",
       "L 156.921307 209.20114 \n",
       "L 160.215286 216.407854 \n",
       "L 163.509264 210.568911 \n",
       "L 166.803243 216.719702 \n",
       "L 170.097222 233.247173 \n",
       "L 173.391201 216.443504 \n",
       "L 176.685179 200.783988 \n",
       "L 179.979158 216.268421 \n",
       "L 183.273137 207.25528 \n",
       "L 186.567116 237.893791 \n",
       "L 189.861094 196.023697 \n",
       "L 193.155073 226.328311 \n",
       "L 196.449052 207.01091 \n",
       "L 199.743031 208.960182 \n",
       "L 203.037009 229.596717 \n",
       "L 206.330988 244.29256 \n",
       "L 209.624967 235.519836 \n",
       "L 212.918946 271.8 \n",
       "L 216.212924 268.700747 \n",
       "L 219.506903 271.01705 \n",
       "L 222.800882 222.269786 \n",
       "L 226.094861 189.4305 \n",
       "L 229.388839 225.750865 \n",
       "L 232.682818 199.779342 \n",
       "L 235.976797 237.400847 \n",
       "L 239.270776 252.747917 \n",
       "L 242.564754 259.306647 \n",
       "L 245.858733 240.818036 \n",
       "L 249.152712 247.372636 \n",
       "L 252.446691 234.724701 \n",
       "L 255.740669 234.782503 \n",
       "L 259.034648 230.801702 \n",
       "L 262.328627 231.479789 \n",
       "L 265.622606 254.527365 \n",
       "L 268.916584 248.458577 \n",
       "L 272.210563 235.887621 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_34\">\n",
       "    <path d=\"M 41.632051 20.497563 \n",
       "L 64.821661 169.282606 \n",
       "L 88.011271 196.792321 \n",
       "L 111.200882 203.794989 \n",
       "L 134.390492 219.708295 \n",
       "L 157.580103 216.913598 \n",
       "L 180.769713 232.693884 \n",
       "L 203.959323 233.438296 \n",
       "L 227.148934 238.284524 \n",
       "L 250.338544 245.37537 \n",
       "\" clip-path=\"url(#pd31dfc8d89)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 30.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 30.103125 7.2 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_1\">\n",
       "    <g id=\"patch_7\">\n",
       "     <path d=\"M 197.148864 45.1125 \n",
       "L 276.739489 45.1125 \n",
       "Q 278.739489 45.1125 278.739489 43.1125 \n",
       "L 278.739489 14.2 \n",
       "Q 278.739489 12.2 276.739489 12.2 \n",
       "L 197.148864 12.2 \n",
       "Q 195.148864 12.2 195.148864 14.2 \n",
       "L 195.148864 43.1125 \n",
       "Q 195.148864 45.1125 197.148864 45.1125 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_35\">\n",
       "     <path d=\"M 199.148864 20.298438 \n",
       "L 209.148864 20.298438 \n",
       "L 219.148864 20.298438 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_18\">\n",
       "     <!-- train_loss -->\n",
       "     <g transform=\"translate(227.148864 23.798438) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-69\" d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-5f\" d=\"M 3263 -1063 \n",
       "L 3263 -1509 \n",
       "L -63 -1509 \n",
       "L -63 -1063 \n",
       "L 3263 -1063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6c\" d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \n",
       "Q 1497 3097 1228 2736 \n",
       "Q 959 2375 959 1747 \n",
       "Q 959 1119 1226 758 \n",
       "Q 1494 397 1959 397 \n",
       "Q 2419 397 2687 759 \n",
       "Q 2956 1122 2956 1747 \n",
       "Q 2956 2369 2687 2733 \n",
       "Q 2419 3097 1959 3097 \n",
       "z\n",
       "M 1959 3584 \n",
       "Q 2709 3584 3137 3096 \n",
       "Q 3566 2609 3566 1747 \n",
       "Q 3566 888 3137 398 \n",
       "Q 2709 -91 1959 -91 \n",
       "Q 1206 -91 779 398 \n",
       "Q 353 888 353 1747 \n",
       "Q 353 2609 779 3096 \n",
       "Q 1206 3584 1959 3584 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"310.546875\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"371.728516\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"423.828125\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_36\">\n",
       "     <path d=\"M 199.148864 35.254688 \n",
       "L 209.148864 35.254688 \n",
       "L 219.148864 35.254688 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_19\">\n",
       "     <!-- val_loss -->\n",
       "     <g transform=\"translate(227.148864 38.754688) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-76\" d=\"M 191 3500 \n",
       "L 800 3500 \n",
       "L 1894 563 \n",
       "L 2988 3500 \n",
       "L 3597 3500 \n",
       "L 2284 0 \n",
       "L 1503 0 \n",
       "L 191 3500 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"226.025391\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"287.207031\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"339.306641\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "L 334.466761 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_3\">\n",
       "    <g id=\"xtick_9\">\n",
       "     <g id=\"line2d_37\">\n",
       "      <path d=\"M 345.995687 284.4 \n",
       "L 345.995687 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_38\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"345.995687\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_20\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(342.814437 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_10\">\n",
       "     <g id=\"line2d_39\">\n",
       "      <path d=\"M 378.935474 284.4 \n",
       "L 378.935474 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_40\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"378.935474\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_21\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(366.210474 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_11\">\n",
       "     <g id=\"line2d_41\">\n",
       "      <path d=\"M 411.875262 284.4 \n",
       "L 411.875262 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_42\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"411.875262\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_22\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(399.150262 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_12\">\n",
       "     <g id=\"line2d_43\">\n",
       "      <path d=\"M 444.815049 284.4 \n",
       "L 444.815049 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_44\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"444.815049\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_23\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(432.090049 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_13\">\n",
       "     <g id=\"line2d_45\">\n",
       "      <path d=\"M 477.754837 284.4 \n",
       "L 477.754837 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_46\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"477.754837\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_24\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(465.029837 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_14\">\n",
       "     <g id=\"line2d_47\">\n",
       "      <path d=\"M 510.694624 284.4 \n",
       "L 510.694624 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_48\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"510.694624\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_25\">\n",
       "      <!-- 5000 -->\n",
       "      <g transform=\"translate(497.969624 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-35\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_15\">\n",
       "     <g id=\"line2d_49\">\n",
       "      <path d=\"M 543.634412 284.4 \n",
       "L 543.634412 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_50\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"543.634412\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_26\">\n",
       "      <!-- 6000 -->\n",
       "      <g transform=\"translate(530.909412 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-36\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_16\">\n",
       "     <g id=\"line2d_51\">\n",
       "      <path d=\"M 576.574199 284.4 \n",
       "L 576.574199 7.2 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_52\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc42bdc3a8c\" x=\"576.574199\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_27\">\n",
       "      <!-- 7000 -->\n",
       "      <g transform=\"translate(563.849199 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-37\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_28\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(450.469318 312.676563) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_4\">\n",
       "    <g id=\"ytick_9\">\n",
       "     <g id=\"line2d_53\">\n",
       "      <path d=\"M 334.466761 264.130435 \n",
       "L 588.103125 264.130435 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_54\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"264.130435\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_29\">\n",
       "      <!-- 0.1 -->\n",
       "      <g transform=\"translate(311.563636 267.929654) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-31\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_10\">\n",
       "     <g id=\"line2d_55\">\n",
       "      <path d=\"M 334.466761 229.069565 \n",
       "L 588.103125 229.069565 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_56\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"229.069565\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_30\">\n",
       "      <!-- 0.2 -->\n",
       "      <g transform=\"translate(311.563636 232.868784) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_11\">\n",
       "     <g id=\"line2d_57\">\n",
       "      <path d=\"M 334.466761 194.008696 \n",
       "L 588.103125 194.008696 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_58\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"194.008696\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_31\">\n",
       "      <!-- 0.3 -->\n",
       "      <g transform=\"translate(311.563636 197.807914) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-33\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_12\">\n",
       "     <g id=\"line2d_59\">\n",
       "      <path d=\"M 334.466761 158.947826 \n",
       "L 588.103125 158.947826 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_60\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"158.947826\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_32\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(311.563636 162.747045) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-34\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_13\">\n",
       "     <g id=\"line2d_61\">\n",
       "      <path d=\"M 334.466761 123.886957 \n",
       "L 588.103125 123.886957 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_62\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"123.886957\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_33\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(311.563636 127.686175) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_14\">\n",
       "     <g id=\"line2d_63\">\n",
       "      <path d=\"M 334.466761 88.826087 \n",
       "L 588.103125 88.826087 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_64\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"88.826087\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_34\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(311.563636 92.625306) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-36\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_15\">\n",
       "     <g id=\"line2d_65\">\n",
       "      <path d=\"M 334.466761 53.765217 \n",
       "L 588.103125 53.765217 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_66\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"53.765217\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_35\">\n",
       "      <!-- 0.7 -->\n",
       "      <g transform=\"translate(311.563636 57.564436) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-37\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_16\">\n",
       "     <g id=\"line2d_67\">\n",
       "      <path d=\"M 334.466761 18.704348 \n",
       "L 588.103125 18.704348 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_68\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m57fcd70426\" x=\"334.466761\" y=\"18.704348\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_36\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(311.563636 22.503567) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-38\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_69\">\n",
       "    <path d=\"M 345.995687 271.8 \n",
       "L 349.289666 189.626087 \n",
       "L 352.583644 189.626087 \n",
       "L 355.877623 162.234783 \n",
       "L 359.171602 145.8 \n",
       "L 362.465581 129.365217 \n",
       "L 365.759559 123.886957 \n",
       "L 369.053538 96.495652 \n",
       "L 372.347517 118.408696 \n",
       "L 375.641496 129.365217 \n",
       "L 378.935474 101.973913 \n",
       "L 382.229453 112.930435 \n",
       "L 385.523432 107.452174 \n",
       "L 388.817411 112.930435 \n",
       "L 392.111389 80.06087 \n",
       "L 395.405368 118.408696 \n",
       "L 398.699347 69.104348 \n",
       "L 401.993326 140.321739 \n",
       "L 405.287304 69.104348 \n",
       "L 408.581283 107.452174 \n",
       "L 411.875262 107.452174 \n",
       "L 415.169241 101.973913 \n",
       "L 418.463219 118.408696 \n",
       "L 421.757198 80.06087 \n",
       "L 425.051177 123.886957 \n",
       "L 428.345156 74.582609 \n",
       "L 431.639134 74.582609 \n",
       "L 434.933113 58.147826 \n",
       "L 438.227092 96.495652 \n",
       "L 441.521071 63.626087 \n",
       "L 444.815049 91.017391 \n",
       "L 448.109028 91.017391 \n",
       "L 451.403007 85.53913 \n",
       "L 454.696986 145.8 \n",
       "L 457.990964 91.017391 \n",
       "L 461.284943 91.017391 \n",
       "L 464.578922 69.104348 \n",
       "L 467.872901 85.53913 \n",
       "L 471.166879 85.53913 \n",
       "L 474.460858 74.582609 \n",
       "L 477.754837 85.53913 \n",
       "L 481.048816 91.017391 \n",
       "L 484.342794 85.53913 \n",
       "L 487.636773 96.495652 \n",
       "L 490.930752 58.147826 \n",
       "L 494.224731 96.495652 \n",
       "L 497.518709 80.06087 \n",
       "L 500.812688 69.104348 \n",
       "L 504.106667 96.495652 \n",
       "L 507.400646 47.191304 \n",
       "L 510.694624 74.582609 \n",
       "L 513.988603 85.53913 \n",
       "L 517.282582 19.8 \n",
       "L 520.576561 25.278261 \n",
       "L 523.870539 41.713043 \n",
       "L 527.164518 63.626087 \n",
       "L 530.458497 101.973913 \n",
       "L 533.752476 74.582609 \n",
       "L 537.046454 74.582609 \n",
       "L 540.340433 52.669565 \n",
       "L 543.634412 41.713043 \n",
       "L 546.928391 47.191304 \n",
       "L 550.222369 63.626087 \n",
       "L 553.516348 85.53913 \n",
       "L 556.810327 69.104348 \n",
       "L 560.104306 69.104348 \n",
       "L 563.398284 63.626087 \n",
       "L 566.692263 80.06087 \n",
       "L 569.986242 36.234783 \n",
       "L 573.280221 69.104348 \n",
       "L 576.574199 58.147826 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_70\">\n",
       "    <path d=\"M 345.995687 262.728 \n",
       "L 369.185297 119.258922 \n",
       "L 392.374908 94.646191 \n",
       "L 415.564518 87.423652 \n",
       "L 438.754129 73.329183 \n",
       "L 461.943739 78.658435 \n",
       "L 485.133349 64.3536 \n",
       "L 508.32296 60.426783 \n",
       "L 531.51257 58.042643 \n",
       "L 554.70218 54.115826 \n",
       "\" clip-path=\"url(#pa02239757f)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 334.466761 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 334.466761 7.2 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_2\">\n",
       "    <g id=\"patch_13\">\n",
       "     <path d=\"M 341.466761 45.1125 \n",
       "L 418.866761 45.1125 \n",
       "Q 420.866761 45.1125 420.866761 43.1125 \n",
       "L 420.866761 14.2 \n",
       "Q 420.866761 12.2 418.866761 12.2 \n",
       "L 341.466761 12.2 \n",
       "Q 339.466761 12.2 339.466761 14.2 \n",
       "L 339.466761 43.1125 \n",
       "Q 339.466761 45.1125 341.466761 45.1125 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_71\">\n",
       "     <path d=\"M 343.466761 20.298438 \n",
       "L 353.466761 20.298438 \n",
       "L 363.466761 20.298438 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_37\">\n",
       "     <!-- train_acc -->\n",
       "     <g transform=\"translate(371.466761 23.798438) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \n",
       "L 3122 2828 \n",
       "Q 2878 2963 2633 3030 \n",
       "Q 2388 3097 2138 3097 \n",
       "Q 1578 3097 1268 2742 \n",
       "Q 959 2388 959 1747 \n",
       "Q 959 1106 1268 751 \n",
       "Q 1578 397 2138 397 \n",
       "Q 2388 397 2633 464 \n",
       "Q 2878 531 3122 666 \n",
       "L 3122 134 \n",
       "Q 2881 22 2623 -34 \n",
       "Q 2366 -91 2075 -91 \n",
       "Q 1284 -91 818 406 \n",
       "Q 353 903 353 1747 \n",
       "Q 353 2603 823 3093 \n",
       "Q 1294 3584 2113 3584 \n",
       "Q 2378 3584 2631 3529 \n",
       "Q 2884 3475 3122 3366 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"344.042969\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"399.023438\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_72\">\n",
       "     <path d=\"M 343.466761 35.254688 \n",
       "L 353.466761 35.254688 \n",
       "L 363.466761 35.254688 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_38\">\n",
       "     <!-- val_acc -->\n",
       "     <g transform=\"translate(371.466761 38.754688) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"259.521484\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"314.501953\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pd31dfc8d89\">\n",
       "   <rect x=\"30.103125\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pa02239757f\">\n",
       "   <rect x=\"334.466761\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns)\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        # axs[idx].set_xticks(range(0, train_df.index[-1], 5000))\n",
    "        # axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, train_df.index[-1], 5000)))\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=100)  #横坐标是 steps"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.8624\n",
      "accuracy: 0.6990\n"
     ]
    }
   ],
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/vgg/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, eval_dl, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 推理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e38f2f7bc3894c058cedbbae7fd3d9fe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/4688 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>filepath</th>\n",
       "      <th>class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cifar-10/test/1.png</td>\n",
       "      <td>deer</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cifar-10/test/2.png</td>\n",
       "      <td>airplane</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cifar-10/test/3.png</td>\n",
       "      <td>truck</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cifar-10/test/4.png</td>\n",
       "      <td>ship</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cifar-10/test/5.png</td>\n",
       "      <td>bird</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              filepath     class\n",
       "0  cifar-10/test/1.png      deer\n",
       "1  cifar-10/test/2.png  airplane\n",
       "2  cifar-10/test/3.png     truck\n",
       "3  cifar-10/test/4.png      ship\n",
       "4  cifar-10/test/5.png      bird"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test_df\n",
    "test_ds = Cifar10Dataset(\"test\", transform=transforms_eval)\n",
    "test_dl = DataLoader(test_ds, batch_size=batch_size, shuffle=False, drop_last=False)\n",
    "\n",
    "preds_collect = []\n",
    "model.eval()\n",
    "for data, fake_label in tqdm(test_dl):\n",
    "    data = data.to(device=device)\n",
    "    logits = model(data)\n",
    "    preds = [test_ds.idx_to_label[idx] for idx in logits.argmax(axis=-1).cpu().tolist()]\n",
    "    preds_collect.extend(preds)\n",
    "    \n",
    "test_df[\"class\"] = preds_collect\n",
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导出 submission.csv\n",
    "test_df.to_csv(\"submission.csv\", index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
